/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package model;

import controle.GerenciadorArquivos;
import java.util.ArrayList;
import java.util.Iterator;

/**
 *
 * @author Marcos Vinicius Rogowski
 */

public class VendaDAO implements OperacoesDAO {

    private ArrayList<Venda> vendas = new ArrayList();
     private static VendaDAO instancia = null;
    
    public static VendaDAO newInstance(){
        if (instancia == null){
            instancia = new VendaDAO();
        }
        return instancia;
    }

    private VendaDAO() {
        if (vendas.isEmpty()) {
            Object obj = GerenciadorArquivos.lerDados("vendas.dat");
            if (obj instanceof ArrayList) {
                vendas = (ArrayList) obj;
            }
        }
    }

    /*
     * @param obj é o disco que será inserido
     */
    @Override
    public void inserir(Object obj) {
        if (obj instanceof Venda) {
            Venda d = (Venda) obj;
            vendas.add(d);
        }
    }

    /*
     * @param obj é titulo
     * @return false se não há o que excluir
     */
    @Override
    public boolean excluir(Object obj) {
        boolean achou = false;
		
		if(obj instanceof String){
			
			int id =  Integer.parseInt((String) obj);
			ArrayList pesquisa = pesquisar(id);
			if (pesquisa.size() != 0) { //Encontrou alguma coisa
				vendas.removeAll(pesquisa);
				achou = true;
			}
		
		}
        return achou;
    }

    /*
     * @param obj é o disco com as informações alteradas exceto título
     */
    @Override
    public void editar(Object obj) {
        if (obj instanceof Venda) {
            Venda p = (Venda) obj;
            int chave = p.getIdVenda();
            for (int i = 0; i < vendas.size(); i++) {
                Venda achou = vendas.get(i);
                if (chave == achou.getIdVenda()) {
                    vendas.set(i, p);
                }
            }
        }
    }

    @Override
    public ArrayList pequisar() {
        return vendas;
    }

    /*
     * @param obj é o critério de pesquisa (titulo) que tem que ser do tipo String
     * @return uma coleção de todos os discos encontrados
     */
    public ArrayList pesquisar(int id) {
        ArrayList<Venda> retorno = new ArrayList();
        
		int chave = (int) id;
		Iterator<Venda> it = vendas.iterator();
		while (it.hasNext()) {
			Venda d = it.next();
			if (chave == d.getIdVenda()) {
				retorno.add(d);
			}
		}
        return retorno;
    }
    
    public void finalizar(){
        GerenciadorArquivos.gravarDados("vendas.dat", vendas);
    }
}
